﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;

public partial class GestionarPracticas_FrModPractica : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------
        if (Session["nomUsr"] != null)
        {
            List<String> Permisos = (List<String>)Session["Permisos"];

            if (!Permisos.Contains(System.IO.Path.GetFileName(HttpContext.Current.Request.FilePath)))
                Response.Redirect("/SUEWebSite/Error.aspx");

        }
        else
            if (Session["nomUsEmp"] != null)
                Response.Redirect("/SUEWebSite/Error.aspx");
        //-------------------------Lineas Agregadas para la seguridad----------------------------------------------------

        if (!Page.IsPostBack)
        {
            if (Request.QueryString["idPractica"] != null)
            {
                string parametro = Request.QueryString["idPractica"].ToString();
                if (!parametro.Equals(""))
                {
                    int idPractica=0;
                    try
                    {
                        idPractica = Convert.ToInt32(parametro);
                    }
                    catch {
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se recibió un id valido!', {timeout: 4 , showClose: false });", true);
                    }

                    if (idPractica != 0)
                    {
                        GestionarPracticas gp = new GestionarPracticas();
                        DataTable resultado = gp.ObtPracticaEspecifica(idPractica);
                        DataRow practica = resultado.Rows[0];
                        CargarPeriodosPracticas();
                        CargarProgramasAcademicos();

                        //Cargamos los convenios de la empresa relacionada con la practica
                        CargarConvenios(Convert.ToInt32(practica["SolicitudPractica_idSolicitudPractica"]));
                        CargarInformacionPractica(practica);

                        //Verifico en que estado esta la practica para habilitar controles
                        if (practica["estadoPractica"].ToString() == "activa")
                        {
                            Button4.Enabled = true;
                            ButtonProceso.Enabled = true;
                        }
                    }
                }
            }
        }

    }
    protected void ButtonSeguimiento_Click(object sender, EventArgs e) 
    {
        Response.Redirect("../GestionarSeguimientoPracticas/FrSeguimientoPractica.aspx?Practica_idPractica=" + Request.QueryString["idPractica"].ToString());
    }
    protected void CargarInformacionPractica(DataRow prac)
    {
        DropDownListPeriodo.SelectedValue = prac["PeriodoPracticas_idPeriodo"].ToString();
        DropDownListPrograma.SelectedValue = prac["ProgramaAcademico_nombrePrograma"].ToString();
        DropDownListEstado.SelectedValue = prac["estadoPractica"].ToString();
        TextBoxObservaciones.Text = prac["observacionesPractica"].ToString();
        CalendarFechaInicio.SelectedDate = Convert.ToDateTime(prac["fechaInicio"].ToString());
        CalendarFechaInicio.VisibleDate = Convert.ToDateTime(prac["fechaInicio"].ToString());
        CalendarFechaCierre.SelectedDate = Convert.ToDateTime(prac["fechaCierre"].ToString());
        DropDownListConvenio.SelectedValue = prac["Convenio_idConvenio"].ToString();

        //Cargo los procesos de seleccion relacionados con la practica.
        CargarProcesosSeleccion();

        //Muestro el practicante que fue asignado a la practica
        if (prac["Usuario_nombreUsuario"].ToString() != string.Empty)
        {
            Usuario practicante = new Usuario();
            practicante = practicante.BuscarUsuario(prac["Usuario_nombreUsuario"].ToString());
            TextBoxPractAsign.Text = practicante.ObtApellido() + ", " + practicante.ObtNombre();
            TextBoxNomUsuPrac.Text = prac["Usuario_nombreUsuario"].ToString();
        }

        try
        {
            CargarLinksDescargaActas();
        }
        catch
        {
            ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No ha subido las actas de inicio o cierre!', {timeout: 4 , showClose: false });", true);
        }
    }

    protected void CargarConvenios(int idSolicitudPractica)
    {
        string empresaNit = "";
        if (idSolicitudPractica!=0)
        {
            SolicitudPractica sol = new SolicitudPractica();
            sol = sol.ObtSolicitudPorId(idSolicitudPractica);
            empresaNit = sol.ObtEmpresaNit();
        }

        if (!empresaNit.Equals(""))
        {
            GestionarConvenios tmp = new GestionarConvenios();
            DataTable convenios = tmp.BusquedaAvanzada("", "", empresaNit);

            if (convenios.Rows.Count > 0)
                foreach (DataRow convenio in convenios.Rows)
                {
                    string idConvenio = convenio["idConvenio"].ToString();
                    string nomConvenio = convenio["nombreConvenio"].ToString();
                    string estadoConvenio = convenio["estadoConvenio"].ToString();
                    string convenioLegal = convenio["Legalizado"].ToString();
                    if (convenioLegal.Equals("") || convenioLegal.Equals("0"))
                        convenioLegal = "No Legalizado";
                    else
                        convenioLegal = "Legalizado";
                    string tipoConvenio = convenio["tipoConvenio"].ToString();
                    string fechaInicio = convenio["fechaInicio"].ToString();
                    string fechaCierre = convenio["fechaVencimiento"].ToString();
                    string nombre = nomConvenio + " (" + convenioLegal + "," + estadoConvenio + "," + tipoConvenio + ")";
                    DropDownListConvenio.Items.Add(new ListItem(nombre, idConvenio));
                }
        }
    }

    /// <summary>
    /// Carga todos los programas academicos registrados en la base de datos   
    /// </summary>
    protected void CargarProgramasAcademicos()
    {
        Programa tmp = new Programa();
        List<Programa> programas = tmp.consultarProgramas();
        foreach (Programa prog in programas)
            DropDownListPrograma.Items.Add(new ListItem(prog.ObtNombre()));
    }

    /// <summary>
    /// Carga todos los periodos activos registrados en la base de datos   
    /// </summary>
    protected void CargarPeriodosPracticas()
    {
        GestionarPeriodosPracticas gp = new GestionarPeriodosPracticas();
        DataTable periodos = gp.BusquedaAvanzada("activo", "");
        foreach (DataRow row in periodos.Rows)
            DropDownListPeriodo.Items.Add(new ListItem(row["nombrePeriodo"].ToString(), row["idPeriodo"].ToString()));
    }

    

    protected void CalendarFechaInicio_SelectionChanged(object sender, EventArgs e)
    {
        CalendarFechaInicio.Visible = false;

    }

    /// <summary>
    /// se quitan las fechas del formulario que no correspondan al mes actual   
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void CalendarFechaInicio_DayRender(object sender, DayRenderEventArgs e)
    {
        if (e.Day.IsOtherMonth)
            e.Cell.Text = "";
    }

    protected void CargarLinksDescargaActas()
    {
        string[] files = Directory.GetFiles(Server.MapPath("../Archivo/Practicas") + "\\" + Request.QueryString["idPractica"].ToString());
        if (files.Length > 0)
        {
            foreach (string file in files)
            {
                FileInfo finfo = new FileInfo(file);
                string archivo = finfo.Name.Replace(finfo.Extension, "");
                if ("ActaInicio" == archivo)
                {
                    HyperLinkActaInicio.NavigateUrl = "../Archivo/Practicas/" + Request.QueryString["idPractica"].ToString() + "/" + finfo.Name;
                    HyperLinkActaInicio.Visible = true;
                }
                if ("ActaCierre" == archivo)
                {
                    HyperLinkActaCierre.NavigateUrl = "../Archivo/Practicas/" + Request.QueryString["idPractica"].ToString() + "/" + finfo.Name;
                    HyperLinkActaCierre.Visible = true;
                }
            }

        }
    }

    protected void CargarProcesosSeleccion()
    {
        GestionarProcesosSeleccion tmp = new GestionarProcesosSeleccion();
        int idPractica = Convert.ToInt32(Request.QueryString["idPractica"].ToString());
        DataTable procesos = tmp.BusquedaAvanazada(idPractica, "Practica");

        Usuario usutmp = new Usuario();
        if (procesos.Rows.Count > 0)
            foreach (DataRow proceso in procesos.Rows)
            {
                Usuario practicante = usutmp.BuscarUsuario(proceso["Practicante_Usuario_nombreUsuario"].ToString());
                string nomApe = practicante.ObtApellido() + ", " + practicante.ObtNombre();
                string nomUsu = practicante.ObtNombreUsuario();
                ListBoxProcesos.Items.Add(new ListItem(nomApe, nomUsu));
            }
    }

    protected void ButtonAsignar_Click(object sender, EventArgs e)
    {
        if (ListBoxProcesos.SelectedValue != string.Empty)
        {
            TextBoxPractAsign.Text = ListBoxProcesos.SelectedItem.Text;
            TextBoxNomUsuPrac.Text = ListBoxProcesos.SelectedValue;
        }
    }

    protected void ButtonModificar_Click(object sender, EventArgs e)
    {
        DropDownListConvenio.Enabled = true;
        DropDownListEstado.Enabled = true;
        DropDownListPeriodo.Enabled = true;
        DropDownListPrograma.Enabled = true;
        ListBoxProcesos.Enabled = true;
        TextBoxObservaciones.Enabled = true;
        CalendarFechaInicio.Enabled = true;
        CalendarFechaCierre.Enabled = true;
        if(!DropDownListConvenio.SelectedValue.Equals("ninguno"))
            ButtonSubir.Enabled = true;
        Button2.Enabled = true;
        ButtonAsignar.Enabled = true;
        ButtonGuardar.Enabled = true;
        Button1.Enabled = false;
        ButtonModificar.Enabled = false;
    }

    protected void ButtonGuardar_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["idPractica"] != null)
        {
            int idPractica = 0;
            try
            {
                idPractica = Convert.ToInt32(Request.QueryString["idPractica"].ToString());
            }
            catch
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se pudo realizar la acción, ID práctica inválido!', {timeout: 4 , showClose: false });", true);
            }
            if (idPractica != 0)
            {
                int idConvenio = 0;
                if (DropDownListConvenio.SelectedValue != "ninguno")
                    idConvenio = Convert.ToInt32(DropDownListConvenio.SelectedValue);
                int idPeriodoPractica = Convert.ToInt32(DropDownListPeriodo.SelectedValue);
                string estadoPractica = DropDownListEstado.SelectedValue;
                string programa = DropDownListPrograma.SelectedValue;
                string pracAsignado = TextBoxNomUsuPrac.Text;
                string observaciones = TextBoxObservaciones.Text;
                if (CalendarFechaCierre.SelectedDate > CalendarFechaInicio.SelectedDate)
                {
                    string fechaInicio = CalendarFechaInicio.SelectedDate.ToShortDateString();
                    string fechaCierre = CalendarFechaCierre.SelectedDate.ToShortDateString();
                    GestionarPracticas gp = new GestionarPracticas();
                    if (gp.ModPracticaEspecifica(idPractica, idPeriodoPractica, idConvenio, programa, pracAsignado
                        , observaciones, estadoPractica, fechaInicio, fechaCierre))
                    {
                        DropDownListConvenio.Enabled = false;
                        DropDownListEstado.Enabled = false;
                        DropDownListPeriodo.Enabled = false;
                        DropDownListPrograma.Enabled = false;
                        ListBoxProcesos.Enabled = false;
                        TextBoxObservaciones.Enabled = false;
                        CalendarFechaInicio.Enabled = false;
                        CalendarFechaCierre.Enabled = false;
                        ButtonSubir.Enabled = false;
                        Button2.Enabled = false;
                        ButtonAsignar.Enabled = false;
                        ButtonGuardar.Enabled = false;
                        Button1.Enabled = true;
                        ButtonModificar.Enabled = true;
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.success('La práctica fue modificada con éxito!', {timeout: 4 , showClose: false });", true);
                    }
                    else
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se pudo modificar la práctica!', {timeout: 4 , showClose: false });", true);
                }
                else
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('La fecha de cierre es menor a la fecha de inicio!', {timeout: 4 , showClose: false });", true);
            }
        }
    }

    protected void ButtonCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("FrConsPracticas.aspx");
    }

    protected void ButtonProcesoSeleccion_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["idPractica"] != null)
        {
            try
            {
                int idPractica = Convert.ToInt32(Request.QueryString["idPractica"].ToString());
                Response.Redirect("/SUEWebSite/ProcesoSeleccion/FrAdmProcesosSeleccion.aspx?idPractica=" + idPractica);
            }
            catch
            {
                ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "$.modaldialog.error('No se pudo realizar la acción, ID práctica inválido!', {timeout: 4 , showClose: false });", true);
            }
        }
    }

    private void EliminarArchivoSiExiste(string archivoEli)
    {
        string archivo;
        string[] files = Directory.GetFiles(Server.MapPath("../Archivo/Practicas") + "\\" + Request.QueryString["idPractica"].ToString());
        if (files.Length > 0)
        {
            foreach (string file in files)
            {
                FileInfo finfo = new FileInfo(file);
                archivo = finfo.Name.Replace(finfo.Extension, "");
                if (archivoEli == archivo)
                    File.Delete(file);
            }

        }
    }

    protected void ButtonSubir_Click(object sender, EventArgs e)
    {
        if ((FileActaInicio.PostedFile != null) && (FileActaInicio.PostedFile.ContentLength > 0))
        {
            string ext = System.IO.Path.GetExtension(FileActaInicio.PostedFile.FileName);
            DirectoryInfo DIR = new DirectoryInfo(Server.MapPath("../Archivo/Practicas") + "\\"
                + Request.QueryString["idPractica"].ToString());
            if (!DIR.Exists)
                DIR.Create();
            string SaveLocation = Server.MapPath("../Archivo/Practicas") + "\\"
                + Request.QueryString["idPractica"].ToString() + "\\ActaInicio" + ext;

            try
            {
                EliminarArchivoSiExiste("ActaInicio");
                FileActaInicio.PostedFile.SaveAs(SaveLocation);
                //LabelNotificacion.Text = "Archivo subido con éxito";

            }
            catch
            {
                //LabelNotificacion.Text = "No se pudo subir el archivo";
            }
            finally
            {

            }

        }

        if ((FileActaCierre.PostedFile != null) && (FileActaCierre.PostedFile.ContentLength > 0))
        {
            string ext = System.IO.Path.GetExtension(FileActaCierre.PostedFile.FileName);
            DirectoryInfo DIR = new DirectoryInfo(Server.MapPath("../Archivo/Practicas") + "\\"
                + Request.QueryString["idPractica"].ToString());
            if (!DIR.Exists)
                DIR.Create();
            string SaveLocation = Server.MapPath("../Archivo/Practicas") + "\\"
                + Request.QueryString["idPractica"].ToString() + "\\ActaCierre" + ext;

            try
            {
                EliminarArchivoSiExiste("ActaCierre");
                FileActaCierre.PostedFile.SaveAs(SaveLocation);
                //LabelNotificacion.Text = "Archivo subido con éxito";

            }
            catch
            {
                //LabelNotificacion.Text = "No se pudo subir el archivo";
            }
            finally
            {

            }

        }
        CargarLinksDescargaActas();
    }
}
